// 扩展2-2、vector 算法
/**
 * 头文件: #include <algorithm>
 * 1. 反转
 * void std::reverse<std::vector<type>::iterator>(std::vector<type>::iterator, std::vector<type>::iterator)
 *
 * 翻转指定迭代器区间[,)内的元素
 *
 * 2. 排序
 * void std::sort<std::vector<type>::iterator, bool (*)(const type &a, const type &b)>(std::vector<type>::iterator, std::vector<type>::iterator, bool (*)(const type &a, const type &b))
 * 
 * 排序指定迭代器区间[,)内的元素，第三参不传默认是升序排列。
 * 
 * 第三参
 * bool comp(const int &a, const int &b)
  {
    return a < b; // 升序 从小到大
    // return a > b; // 降序 从大到小
  }
 */

#include <iostream>
#include <algorithm>
#include <vector>
#include <time.h>
bool comp(const int &a, const int &b)
{
  return a < b; // 升序 从小到大
  // return a > b; // 降序 从大到小
}
int main(void)
{
  std::vector<int> vec(10);

  srand((unsigned)time(NULL));
  for (int i = 0; i < 10; i++)
  {
    // vec.at(i) = i;
    vec.at(i) = rand() % 10 + 0;
  }

  // reverse(vec.begin(), vec.end());// 翻转指定区间内的元素
  // reverse(vec.begin(), vec.end() - 5);

  // sort(vec.begin(), vec.end()); // 排序指定区间内的元素，默认升序，从小到大
  // sort(vec.begin() + 2, vec.end() - 2); // 排序指定区间[2,8)内的元素，默认升序，从小到大
  sort(vec.begin(), vec.end(), comp);
  // sort(vec.begin(), vec.end(), [](const int &a, const int &b)
  //  { return a > b; }); // 排序指定区间内的元素，从大到小

  for (int i = 0; i < (int)vec.size(); i++)
  {
    std::cout << "vec[" << i << "]:" << vec[i] << std::endl;
  }
  printf("---------------end------------------\n");
  return 0;
}